package bd;

import java.sql.*;

/** Classe pDep, encarregada da criação do painel de departamento
 *
 */
public class pDep extends javax.swing.JPanel {

    private String condicoes;
    private conecta bd;
    private frame principal;
    private ResultSet retorno;
    private boolean atualizacao;
    private String novaLinha;
    private painelTabelas painel;

    /** construtor da classe pDep, encarregado de dar forma ao painel,
     * fazer a ligação com o banco de dados e com a janela principal
     */
    public pDep(conecta bd, frame principal, painelTabelas painel) {
        initComponents();
        this.bd = bd;
        this.principal = principal;
        this.cancelaDep.setVisible(false);
        this.painel = painel;
    }

    /** Método initComponents(). tem a função da criação da janela de departamento,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buscaDep = new javax.swing.JButton();
        insereDep = new javax.swing.JButton();
        atualizaDep = new javax.swing.JButton();
        removeDep = new javax.swing.JButton();
        cancelaDep = new javax.swing.JButton();
        nomeDepDEP = new javax.swing.JTextField();
        telDepDEP = new javax.swing.JTextField();
        cnpjEmissoraDEP = new javax.swing.JTextField();
        idDepDEP = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();

        buscaDep.setText("Buscar");
        buscaDep.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscaDepActionPerformed(evt);
            }
        });

        insereDep.setText("Inserir");
        insereDep.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insereDepActionPerformed(evt);
            }
        });

        atualizaDep.setText("Atualizar");
        atualizaDep.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaDepActionPerformed(evt);
            }
        });

        removeDep.setText("Remover");
        removeDep.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeDepActionPerformed(evt);
            }
        });

        cancelaDep.setText("Cancelar");
        cancelaDep.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelaDepActionPerformed(evt);
            }
        });

        jLabel1.setText("CNPJ da Emissora:");

        jLabel2.setText("ID do Departamento:");

        jLabel3.setText("Nome do Departamento:");

        jLabel4.setText("Telefone do Departamento:");

        jLabel6.setText("Entre com os dados:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(48, 48, 48)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(buscaDep)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(insereDep)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(atualizaDep)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(removeDep)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(cancelaDep))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jLabel6, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel2)
                                .addComponent(jLabel1)
                                .addComponent(jLabel3)
                                .addComponent(jLabel4))
                            .addGap(24, 24, 24)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel5)
                                .addComponent(telDepDEP)
                                .addComponent(idDepDEP, javax.swing.GroupLayout.DEFAULT_SIZE, 213, Short.MAX_VALUE)
                                .addComponent(cnpjEmissoraDEP, javax.swing.GroupLayout.DEFAULT_SIZE, 213, Short.MAX_VALUE)
                                .addComponent(nomeDepDEP, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addContainerGap(48, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cnpjEmissoraDEP, idDepDEP, nomeDepDEP, telDepDEP});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel6)
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(jLabel1)
                    .addComponent(cnpjEmissoraDEP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(jLabel2)
                    .addComponent(idDepDEP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(jLabel3)
                    .addComponent(nomeDepDEP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(jLabel4)
                    .addComponent(telDepDEP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(128, 128, 128)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(buscaDep)
                    .addComponent(insereDep)
                    .addComponent(atualizaDep)
                    .addComponent(removeDep)
                    .addComponent(cancelaDep))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão insere.
     * Faz a inserção no banco de dados dos valores digitados no painel.
     */
    private void insereDepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_insereDepActionPerformed
        bd.insercao("INSERT INTO departamento(idDe, nomeDe, telefoneDe, nroFuncionariosDe, cnpjEm)"
                + "VALUES (ID_DEPARTAMENTO.NEXTVAL, '" + nomeDepDEP.getText() + "', '" + telDepDEP.getText()
                + "', 0, " + cnpjEmissoraDEP.getText() + " )");
        limpaTela();
    }//GEN-LAST:event_insereDepActionPerformed

    /** Trata eventos relacionados ao botão buscar.
     * Realiza a busca de acordo com determinado texto digitado, retornando
     * o resultado da pesquisa. Também trata erro.
     */
    private void buscaDepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscaDepActionPerformed
        lerDep();
        try {
            retorno = bd.consulta("SELECT * FROM departamento " + condicoes);
            this.principal.mostraBusca(retorno);
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        limpaTela();
    }//GEN-LAST:event_buscaDepActionPerformed

    /** Trata eventos relacionados ao botão atualiza. Quando o botão é pressionado,
     * é enviada uma mensagem de instruções para acontecer a atualização.
     * Recebe os dados digitados e atualiza no banco.
     */
    private void atualizaDepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaDepActionPerformed
        if (atualizacao == false) {
            lerDep();
            jLabel6.setText("Entre com os novos dados e aperte atualizar novamente");
            mudaVisualizacaoDep();
            limpaTela();
        } else if (atualizacao == true) {
            novaLinha = "SET";
            if (cnpjEmissoraDEP.getText() != null && !cnpjEmissoraDEP.getText().trim().equals("")) {
                novaLinha = novaLinha + " cnpjEm = " + cnpjEmissoraDEP.getText() + ", ";
            }
            if (idDepDEP.getText() != null && !idDepDEP.getText().trim().equals("")) {
                novaLinha = novaLinha + " idDe = " + idDepDEP.getText() + " , ";
            }
            if (nomeDepDEP.getText() != null && !nomeDepDEP.getText().trim().equals("")) {
                novaLinha = novaLinha + " nomeDe = '" + nomeDepDEP.getText() + "', ";
            }
            if (telDepDEP.getText() != null && !telDepDEP.getText().trim().equals("")) {
                novaLinha = novaLinha + " telefoneDe = " + telDepDEP.getText() + ", ";
            }
            novaLinha = novaLinha.substring(0, novaLinha.length() - 2);
            bd.atualiza("UPDATE departamento " + novaLinha + " " + condicoes);
            jLabel6.setText("Entre com os dados:");
            mudaVisualizacaoDep();
            condicoes = null;
            novaLinha = null;
            limpaTela();
        }
    }//GEN-LAST:event_atualizaDepActionPerformed

    /** Trata eventos relacionados ao botão remove.
     * Remove determinada tupla selecionada. trata erros
     */
    private void removeDepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeDepActionPerformed
        novaLinha = "departamento";//novaLinha esta sendo usada para parametrizar a exclusão pelo outro painel
        lerDep();
        try {
            retorno = bd.consulta("SELECT * FROM " + novaLinha + " " + condicoes);
            this.painel.novaLinha = novaLinha;
            this.painel.condicoes = condicoes;
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        this.principal.BuscaParaRemover(retorno);
        limpaTela();
    }//GEN-LAST:event_removeDepActionPerformed

    /** Trata eventos relacionados ao botão cancelar.
     * Ajusta o label da janela, volta pra janela principal e limpa os campos
     */
    private void cancelaDepActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelaDepActionPerformed
        jLabel6.setText("Entre com os dados:");
        mudaVisualizacaoDep();
        condicoes = null;
        novaLinha = null;
        limpaTela();
    }//GEN-LAST:event_cancelaDepActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton atualizaDep;
    private javax.swing.JButton buscaDep;
    private javax.swing.JButton cancelaDep;
    public javax.swing.JTextField cnpjEmissoraDEP;
    public javax.swing.JTextField idDepDEP;
    private javax.swing.JButton insereDep;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    public javax.swing.JTextField nomeDepDEP;
    private javax.swing.JButton removeDep;
    public javax.swing.JTextField telDepDEP;
    // End of variables declaration//GEN-END:variables

    /** limpa os campos.
     */
    private void limpaTela() {
        cnpjEmissoraDEP.setText(null);
        idDepDEP.setText(null);
        nomeDepDEP.setText(null);
        telDepDEP.setText(null);
    }

    /** Lê valores digitados, usando-os para fazer a condição do select
     */
    private void lerDep() {
        condicoes = "WHERE";
        if (cnpjEmissoraDEP.getText() != null && !cnpjEmissoraDEP.getText().trim().equals("")) {
            condicoes = condicoes + " cnpjEm = " + cnpjEmissoraDEP.getText() + " AND ";
        }
        if (idDepDEP.getText() != null && !idDepDEP.getText().trim().equals("")) {
            condicoes = condicoes + " idDe = " + idDepDEP.getText() + " AND ";
        }
        if (nomeDepDEP.getText() != null && !nomeDepDEP.getText().trim().equals("")) {
            condicoes = condicoes + " UPPER(nomeDe) = UPPER('" + nomeDepDEP.getText() + "') AND ";
        }
        if (telDepDEP.getText() != null && !telDepDEP.getText().trim().equals("")) {
            condicoes = condicoes + " telefoneDe = " + telDepDEP.getText() + " AND ";
        }
        condicoes = condicoes.substring(0, condicoes.length() - 5);
    }

    /** Método que muda a visualização da janela comercial
     */
    private void mudaVisualizacaoDep() {
        cancelaDep.setVisible(!atualizacao);
        painel.abaEdicaoTabelas.setEnabled(atualizacao);
        painel.painelPrincipal.setEnabled(atualizacao);
        buscaDep.setEnabled(atualizacao);
        insereDep.setEnabled(atualizacao);
        removeDep.setEnabled(atualizacao);
        atualizacao = !atualizacao;
    }
}
